From fdc2059edb50cf39338a81d96f03a258cd840b23 Mon Sep 17 00:00:00 2001 From: Alexander Larsson Date: Tue, 5 Apr 2011 10:43:52 +0200 Subject: [PATCH] [broadway] Track future pointer events locations during parsing We want this info so that we can avoid roundtrips and still get a somewhat better querying for pointer locations. --- gdk/broadway/gdkdisplay-broadway.c | 12 ++++++++++++ gdk/broadway/gdkdisplay-broadway.h | 5 +++++ 2 files changed, 17 insertions(+) diff --git a/gdk/broadway/gdkdisplay-broadway.c b/gdk/broadway/gdkdisplay-broadway.c index a63b755bc1..9bc4ff99bc 100644 --- a/gdk/broadway/gdkdisplay-broadway.c +++ b/gdk/broadway/gdkdisplay-broadway.c @@ -185,6 +185,14 @@ parse_pointer_data (char *p, BroadwayInputPointerMsg *data) return p; } +static void +update_future_pointer_info (GdkBroadwayDisplay *broadway_display, BroadwayInputPointerMsg *data) +{ + broadway_display->future_root_x = data->root_x; + broadway_display->future_root_y = data->root_y; + broadway_display->future_mouse_in_toplevel = data->mouse_window_id; +} + static void parse_input_message (BroadwayInput *input, const char *message) { @@ -205,23 +213,27 @@ parse_input_message (BroadwayInput *input, const char *message) case 'e': /* Enter */ case 'l': /* Leave */ p = parse_pointer_data (p, &msg.pointer); + update_future_pointer_info (broadway_display, &msg.pointer); p++; /* Skip , */ msg.crossing.mode = strtol(p, &p, 10); break; case 'm': /* Mouse move */ p = parse_pointer_data (p, &msg.pointer); + update_future_pointer_info (broadway_display, &msg.pointer); break; case 'b': case 'B': p = parse_pointer_data (p, &msg.pointer); + update_future_pointer_info (broadway_display, &msg.pointer); p++; /* Skip , */ msg.button.button = strtol(p, &p, 10); break; case 's': p = parse_pointer_data (p, &msg.pointer); + update_future_pointer_info (broadway_display, &msg.pointer); p++; /* Skip , */ msg.scroll.dir = strtol(p, &p, 10); break; diff --git a/gdk/broadway/gdkdisplay-broadway.h b/gdk/broadway/gdkdisplay-broadway.h index 0440b08f0c..25b0397a93 100644 --- a/gdk/broadway/gdkdisplay-broadway.h +++ b/gdk/broadway/gdkdisplay-broadway.h @@ -155,6 +155,11 @@ struct _GdkBroadwayDisplay GdkWindow *pointer_grab_window; guint32 pointer_grab_time; gboolean pointer_grab_owner_events; + + /* Future data, from the currently queued events */ + int future_root_x; + int future_root_y; + int future_mouse_in_toplevel; }; struct _GdkBroadwayDisplayClass -- 2.30.2